package com.hc.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class ExcelUtils {
    public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
    public static final int UNIT_OFFSET_LENGTH = 7;
    public static final int[] UNIT_OFFSET_MAP = new int[]{0, 36, 73, 109, 146, 182, 219};

    public static short pixel2WidthUnits(int pxs) {
        short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs / UNIT_OFFSET_LENGTH));
        widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
        return widthUnits;
    }

    public static int widthUnits2Pixel(int widthUnits) {
        int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR) * UNIT_OFFSET_LENGTH;
        int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
        pixels += Math.round(offsetWidthUnits / ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
        return pixels;
    }

    public static void createCell(String[] headers, HSSFRow row, HSSFWorkbook workbook, HSSFSheet sheet) {
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        font.setBold(true);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        style.setFont(font);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        for (int i = 0; i < headers.length; i++) {
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            cell.setCellValue(text);
            cell.setCellStyle(style);
            sheet.setColumnWidth(i, (256 * 30));
        }
    }

    public static void closeResponse(HttpServletResponse response, String fileName, HSSFWorkbook workbook) throws IOException {
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + System.currentTimeMillis() + ".xls");
        ServletOutputStream outputStream = response.getOutputStream();
        workbook.write(outputStream);
        workbook.close();
        outputStream.close();
    }


    /**
     * @param workbook
     * @param fontsize
     * @return 单元格样式
     */
    public static HSSFCellStyle createErrorStyle(HSSFWorkbook workbook, short fontsize, boolean flag, boolean flag1, int bg) {
        // TODO Auto-generated method stub
        HSSFCellStyle style = workbook.createCellStyle();
        //是否水平居中
        if (flag1) {
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        }
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        //创建字体
        HSSFFont font = workbook.createFont();
        //是否加粗字体
        if (flag) {
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        }
        font.setFontHeightInPoints(fontsize);
        if (bg == 0) {
            style.setFillForegroundColor(HSSFColor.RED.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        }
        //加载字体
        style.setFont(font);
        return style;
    }


    /**
     * 设置excel样式
     *
     * @param hssfWorkbook
     * @return
     */
    public static HSSFCellStyle getStyle(HSSFWorkbook hssfWorkbook) {
        HSSFCellStyle style = hssfWorkbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
        style.setWrapText(true);
        return style;
    }

    /**
     * 冰箱，培养箱，显微镜，环境，工作站，工作台等设备excel表头设置
     *
     * @param cellNum    行数
     * @param rowNum     列数
     * @param eqName     设备类型名称
     * @param deviceName 设备名称
     */
    public static HSSFWorkbook setHeaders(int cellNum, int rowNum, String eqName, String deviceName) {
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        HSSFCellStyle style = getStyle(hssfWorkbook);
        if (StringUtils.equals("冰箱", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                //设置每一列的高度
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("时间");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(3).setCellValue("上班巡检");
            sheet.getRow(1).getCell(3).setCellStyle(style);
            sheet.getRow(1).getCell(8).setCellValue("下班巡检");
            sheet.getRow(1).getCell(8).setCellStyle(style);
            sheet.getRow(1).getCell(13).setCellValue("维护记录");
            sheet.getRow(1).getCell(13).setCellStyle(style);
            sheet.getRow(1).getCell(14).setCellValue("自查说明");
            sheet.getRow(1).getCell(14).setCellStyle(style);
            sheet.getRow(1).getCell(15).setCellValue("审核人");
            sheet.getRow(1).getCell(15).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("温度");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("巡检时间");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("运行状态");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("冷藏温度");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("冷冻温度");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            sheet.getRow(2).getCell(7).setCellValue("巡检者");
            sheet.getRow(2).getCell(7).setCellStyle(style);
            sheet.getRow(2).getCell(8).setCellValue("巡检时间");
            sheet.getRow(2).getCell(8).setCellStyle(style);
            sheet.getRow(2).getCell(9).setCellValue("运行状态");
            sheet.getRow(2).getCell(9).setCellStyle(style);
            sheet.getRow(2).getCell(10).setCellValue("冷藏温度");
            sheet.getRow(2).getCell(10).setCellStyle(style);
            sheet.getRow(2).getCell(11).setCellValue("冷冻温度");
            sheet.getRow(2).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(12).setCellValue("巡检者");
            sheet.getRow(2).getCell(12).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 15);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 2, 1, 1);
            sheet.addMergedRegion(region3);
            CellRangeAddress region5 = new CellRangeAddress(1, 1, 3, 7);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 1, 8, 12);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 13, 13);
            sheet.addMergedRegion(region7);
            CellRangeAddress region8 = new CellRangeAddress(1, 2, 14, 14);
            sheet.addMergedRegion(region8);
            CellRangeAddress region9 = new CellRangeAddress(1, 2, 15, 15);
            sheet.addMergedRegion(region9);
            return hssfWorkbook;
        } else if (StringUtils.equals("培养箱", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("时间");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(2).setCellValue("机器自身数据 (MT700)");
            sheet.getRow(1).getCell(2).setCellStyle(style);
            sheet.getRow(1).getCell(6).setCellValue("第三方数据");
            sheet.getRow(1).getCell(6).setCellStyle(style);
            sheet.getRow(1).getCell(10).setCellValue("上班巡检");
            sheet.getRow(1).getCell(10).setCellStyle(style);
            sheet.getRow(1).getCell(13).setCellValue("下班巡检");
            sheet.getRow(1).getCell(13).setCellStyle(style);
            sheet.getRow(1).getCell(16).setCellValue("维护记录");
            sheet.getRow(1).getCell(16).setCellStyle(style);
            sheet.getRow(1).getCell(17).setCellValue("自查说明");
            sheet.getRow(1).getCell(17).setCellStyle(style);
            sheet.getRow(1).getCell(18).setCellValue("审核人");
            sheet.getRow(1).getCell(18).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("温度");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("湿度");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("CO2浓度");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("O2浓度");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("温度1 (MT100)");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            sheet.getRow(2).getCell(7).setCellValue("温度2 (MT300)");
            sheet.getRow(2).getCell(7).setCellStyle(style);
            sheet.getRow(2).getCell(8).setCellValue("C02浓度 (MT300)");
            sheet.getRow(2).getCell(8).setCellStyle(style);
            sheet.getRow(2).getCell(9).setCellValue("02浓度");
            sheet.getRow(2).getCell(9).setCellStyle(style);
            sheet.getRow(2).getCell(10).setCellValue("巡检时间");
            sheet.getRow(2).getCell(10).setCellStyle(style);
            sheet.getRow(2).getCell(11).setCellValue("巡检状态");
            sheet.getRow(2).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(12).setCellValue("巡检者");
            sheet.getRow(2).getCell(12).setCellStyle(style);
            sheet.getRow(2).getCell(13).setCellValue("巡检时间");
            sheet.getRow(2).getCell(13).setCellStyle(style);
            sheet.getRow(2).getCell(14).setCellValue("巡检状态");
            sheet.getRow(2).getCell(14).setCellStyle(style);
            sheet.getRow(2).getCell(15).setCellValue("巡检者");
            sheet.getRow(2).getCell(15).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 18);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 2, 1, 1);
            sheet.addMergedRegion(region3);
            CellRangeAddress region5 = new CellRangeAddress(1, 1, 2, 5);
            sheet.addMergedRegion(region5);
            CellRangeAddress region7 = new CellRangeAddress(1, 1, 6, 9);
            sheet.addMergedRegion(region7);
            CellRangeAddress region8 = new CellRangeAddress(1, 1, 10, 12);
            sheet.addMergedRegion(region8);
            CellRangeAddress region9 = new CellRangeAddress(1, 1, 13, 15);
            sheet.addMergedRegion(region9);
            CellRangeAddress region10 = new CellRangeAddress(1, 2, 16, 16);
            sheet.addMergedRegion(region10);
            CellRangeAddress region11 = new CellRangeAddress(1, 2, 17, 17);
            sheet.addMergedRegion(region11);
            CellRangeAddress region12 = new CellRangeAddress(1, 2, 18, 18);
            sheet.addMergedRegion(region12);
            return hssfWorkbook;
        } else if (StringUtils.equals("显微镜", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("开始巡检");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(5).setCellValue("结束巡检");
            sheet.getRow(1).getCell(5).setCellStyle(style);
            sheet.getRow(1).getCell(9).setCellValue("维护记录");
            sheet.getRow(1).getCell(9).setCellStyle(style);
            sheet.getRow(1).getCell(10).setCellValue("自查说明");
            sheet.getRow(1).getCell(10).setCellStyle(style);
            sheet.getRow(1).getCell(11).setCellValue("审核人");
            sheet.getRow(1).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(1).setCellValue("巡检时间");
            sheet.getRow(2).getCell(1).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("运行状态");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("备注");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("巡检者");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("巡检时间");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("运行状态");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            sheet.getRow(2).getCell(7).setCellValue("备注");
            sheet.getRow(2).getCell(7).setCellStyle(style);
            sheet.getRow(2).getCell(8).setCellValue("巡检者");
            sheet.getRow(2).getCell(8).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 11);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 1, 1, 4);
            sheet.addMergedRegion(region3);
            CellRangeAddress region4 = new CellRangeAddress(1, 1, 5, 8);
            sheet.addMergedRegion(region4);
            CellRangeAddress region5 = new CellRangeAddress(1, 2, 9, 9);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 2, 10, 10);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 11, 11);
            sheet.addMergedRegion(region7);
            return hssfWorkbook;
        } else if (StringUtils.equals("工作站", eqName) || StringUtils.equals("离心机", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("开始巡检");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(4).setCellValue("结束巡检");
            sheet.getRow(1).getCell(4).setCellStyle(style);
            sheet.getRow(1).getCell(7).setCellValue("维护记录");
            sheet.getRow(1).getCell(7).setCellStyle(style);
            sheet.getRow(1).getCell(8).setCellValue("自查说明");
            sheet.getRow(1).getCell(8).setCellStyle(style);
            sheet.getRow(1).getCell(9).setCellValue("审核人");
            sheet.getRow(1).getCell(9).setCellStyle(style);
            sheet.getRow(2).getCell(1).setCellValue("巡检时间");
            sheet.getRow(2).getCell(1).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("运行状态");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("巡检者");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("巡检时间");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("运行状态");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("巡检者");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 9);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 1, 1, 3);
            sheet.addMergedRegion(region3);
            CellRangeAddress region4 = new CellRangeAddress(1, 1, 4, 6);
            sheet.addMergedRegion(region4);
            CellRangeAddress region5 = new CellRangeAddress(1, 2, 7, 7);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 2, 8, 8);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 9, 9);
            sheet.addMergedRegion(region7);
            return hssfWorkbook;
        } else if (StringUtils.equals("胚胎库", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("上班巡检");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(8).setCellValue("下班巡检");
            sheet.getRow(1).getCell(8).setCellStyle(style);
            sheet.getRow(1).getCell(15).setCellValue("是否添加液氮");
            sheet.getRow(1).getCell(15).setCellStyle(style);
            sheet.getRow(1).getCell(16).setCellValue("维护记录");
            sheet.getRow(1).getCell(16).setCellStyle(style);
            sheet.getRow(1).getCell(17).setCellValue("自查说明");
            sheet.getRow(1).getCell(17).setCellStyle(style);
            sheet.getRow(1).getCell(18).setCellValue("审核人");
            sheet.getRow(1).getCell(18).setCellStyle(style);
            sheet.getRow(2).getCell(1).setCellValue("巡检时间");
            sheet.getRow(2).getCell(1).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("监控系统");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("液氮罐锁");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("液氮罐锁备注");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("罐体温度");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("罐体温度备注");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            sheet.getRow(2).getCell(7).setCellValue("巡检者");
            sheet.getRow(2).getCell(7).setCellStyle(style);
            sheet.getRow(2).getCell(8).setCellValue("巡检时间");
            sheet.getRow(2).getCell(8).setCellStyle(style);
            sheet.getRow(2).getCell(9).setCellValue("监控系统");
            sheet.getRow(2).getCell(9).setCellStyle(style);
            sheet.getRow(2).getCell(10).setCellValue("液氮罐锁");
            sheet.getRow(2).getCell(10).setCellStyle(style);
            sheet.getRow(2).getCell(11).setCellValue("液氮罐锁备注");
            sheet.getRow(2).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(12).setCellValue("罐体温度");
            sheet.getRow(2).getCell(12).setCellStyle(style);
            sheet.getRow(2).getCell(13).setCellValue("罐体温度备注");
            sheet.getRow(2).getCell(13).setCellStyle(style);
            sheet.getRow(2).getCell(14).setCellValue("巡检者");
            sheet.getRow(2).getCell(14).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 17);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 1, 1, 7);
            sheet.addMergedRegion(region3);
            CellRangeAddress region4 = new CellRangeAddress(1, 1, 8, 14);
            sheet.addMergedRegion(region4);
            CellRangeAddress region5 = new CellRangeAddress(1, 2, 15, 15);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 2, 16, 16);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 17, 17);
            sheet.addMergedRegion(region7);
            CellRangeAddress region8 = new CellRangeAddress(1, 2, 18, 18);
            sheet.addMergedRegion(region8);
            return hssfWorkbook;
        } else if (StringUtils.equals("环境", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("时间");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(2).setCellValue("温度");
            sheet.getRow(1).getCell(2).setCellStyle(style);
            sheet.getRow(1).getCell(3).setCellValue("湿度");
            sheet.getRow(1).getCell(3).setCellStyle(style);
            sheet.getRow(1).getCell(4).setCellValue("VOC(PPM)");
            sheet.getRow(1).getCell(4).setCellStyle(style);
            sheet.getRow(1).getCell(5).setCellValue("PM2.5(带单位)");
            sheet.getRow(1).getCell(5).setCellStyle(style);
            sheet.getRow(1).getCell(6).setCellValue("PM10(带单位)");
            sheet.getRow(1).getCell(6).setCellStyle(style);
            sheet.getRow(1).getCell(7).setCellValue("氧气浓度(带单位)");
            sheet.getRow(1).getCell(7).setCellStyle(style);
            sheet.getRow(1).getCell(8).setCellValue("二氧化碳浓度(带单位)");
            sheet.getRow(1).getCell(8).setCellStyle(style);
            sheet.getRow(1).getCell(9).setCellValue("甲醛(带单位)");
            sheet.getRow(1).getCell(9).setCellStyle(style);
            sheet.getRow(1).getCell(10).setCellValue("压力(带单位)");
            sheet.getRow(1).getCell(10).setCellStyle(style);
            sheet.getRow(1).getCell(11).setCellValue("上班巡检");
            sheet.getRow(1).getCell(11).setCellStyle(style);
            sheet.getRow(1).getCell(14).setCellValue("下班巡检");
            sheet.getRow(1).getCell(14).setCellStyle(style);
            sheet.getRow(1).getCell(17).setCellValue("维护记录");
            sheet.getRow(1).getCell(17).setCellStyle(style);
            sheet.getRow(1).getCell(18).setCellValue("自查说明");
            sheet.getRow(1).getCell(18).setCellStyle(style);
            sheet.getRow(1).getCell(19).setCellValue("审核人");
            sheet.getRow(1).getCell(19).setCellStyle(style);
            sheet.getRow(2).getCell(11).setCellValue("巡检时间");
            sheet.getRow(2).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(12).setCellValue("巡检状态");
            sheet.getRow(2).getCell(12).setCellStyle(style);
            sheet.getRow(2).getCell(13).setCellValue("巡检者");
            sheet.getRow(2).getCell(13).setCellStyle(style);
            sheet.getRow(2).getCell(14).setCellValue("巡检时间");
            sheet.getRow(2).getCell(14).setCellStyle(style);
            sheet.getRow(2).getCell(15).setCellValue("巡检状态");
            sheet.getRow(2).getCell(15).setCellStyle(style);
            sheet.getRow(2).getCell(16).setCellValue("巡检者");
            sheet.getRow(2).getCell(16).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 19);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 2, 1, 1);
            sheet.addMergedRegion(region3);
            CellRangeAddress region4 = new CellRangeAddress(1, 2, 2, 2);
            sheet.addMergedRegion(region4);
            CellRangeAddress region5 = new CellRangeAddress(1, 2, 3, 3);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 2, 4, 4);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 5, 5);
            sheet.addMergedRegion(region7);
            CellRangeAddress region8 = new CellRangeAddress(1, 2, 6, 6);
            sheet.addMergedRegion(region8);
            CellRangeAddress region9 = new CellRangeAddress(1, 2, 7, 7);
            sheet.addMergedRegion(region9);
            CellRangeAddress region10 = new CellRangeAddress(1, 2, 8, 8);
            sheet.addMergedRegion(region10);
            CellRangeAddress region11 = new CellRangeAddress(1, 2, 9, 9);
            sheet.addMergedRegion(region11);
            CellRangeAddress region12 = new CellRangeAddress(1, 2, 10, 10);
            sheet.addMergedRegion(region12);
            CellRangeAddress region13 = new CellRangeAddress(1, 1, 11, 13);
            sheet.addMergedRegion(region13);
            CellRangeAddress region14 = new CellRangeAddress(1, 1, 14, 16);
            sheet.addMergedRegion(region14);
            CellRangeAddress region15 = new CellRangeAddress(1, 2, 17, 17);
            sheet.addMergedRegion(region15);
            CellRangeAddress region16 = new CellRangeAddress(1, 2, 18, 18);
            sheet.addMergedRegion(region16);
            CellRangeAddress region17 = new CellRangeAddress(1, 2, 19, 19);
            sheet.addMergedRegion(region17);
            return hssfWorkbook;
        } else if (StringUtils.equals("工作台", eqName)) {
            HSSFSheet sheet = hssfWorkbook.createSheet(eqName + "每月质控");
            HSSFRow row = null;
            HSSFCell cell = null;
            for (int j = 0; j < cellNum; j++) {
                row = sheet.createRow(j);
                sheet.getRow(j).setHeightInPoints(40);
                for (int i = 0; i < rowNum; i++) {
                    cell = row.createCell(i);
                }
            }
            sheet.getRow(0).getCell(0).setCellValue(deviceName + "质控");
            sheet.getRow(0).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(0).setCellValue("日期");
            sheet.getRow(1).getCell(0).setCellStyle(style);
            sheet.getRow(1).getCell(1).setCellValue("操作前");
            sheet.getRow(1).getCell(1).setCellStyle(style);
            sheet.getRow(1).getCell(11).setCellValue("操作后");
            sheet.getRow(1).getCell(11).setCellStyle(style);
            sheet.getRow(1).getCell(21).setCellValue("维护记录");
            sheet.getRow(1).getCell(21).setCellStyle(style);
            sheet.getRow(1).getCell(22).setCellValue("自查说明");
            sheet.getRow(1).getCell(22).setCellStyle(style);
            sheet.getRow(1).getCell(23).setCellValue("审核人");
            sheet.getRow(1).getCell(23).setCellStyle(style);
            sheet.getRow(2).getCell(1).setCellValue("操作时间");
            sheet.getRow(2).getCell(1).setCellStyle(style);
            sheet.getRow(2).getCell(2).setCellValue("操作类型");
            sheet.getRow(2).getCell(2).setCellStyle(style);
            sheet.getRow(2).getCell(3).setCellValue("油量");
            sheet.getRow(2).getCell(3).setCellStyle(style);
            sheet.getRow(2).getCell(4).setCellValue("操作臂行程");
            sheet.getRow(2).getCell(4).setCellStyle(style);
            sheet.getRow(2).getCell(5).setCellValue("温板温度");
            sheet.getRow(2).getCell(5).setCellStyle(style);
            sheet.getRow(2).getCell(6).setCellValue("添加矿物油");
            sheet.getRow(2).getCell(6).setCellStyle(style);
            sheet.getRow(2).getCell(7).setCellValue("光源");
            sheet.getRow(2).getCell(7).setCellStyle(style);
            sheet.getRow(2).getCell(8).setCellValue("激光能量");
            sheet.getRow(2).getCell(8).setCellStyle(style);
            sheet.getRow(2).getCell(9).setCellValue("激光焦点位置");
            sheet.getRow(2).getCell(9).setCellStyle(style);
            sheet.getRow(2).getCell(10).setCellValue("操作者");
            sheet.getRow(2).getCell(10).setCellStyle(style);
            sheet.getRow(2).getCell(11).setCellValue("操作时间");
            sheet.getRow(2).getCell(11).setCellStyle(style);
            sheet.getRow(2).getCell(12).setCellValue("操作类型");
            sheet.getRow(2).getCell(12).setCellStyle(style);
            sheet.getRow(2).getCell(13).setCellValue("油量");
            sheet.getRow(2).getCell(13).setCellStyle(style);
            sheet.getRow(2).getCell(14).setCellValue("操作臂行程");
            sheet.getRow(2).getCell(14).setCellStyle(style);
            sheet.getRow(2).getCell(15).setCellValue("温板温度");
            sheet.getRow(2).getCell(15).setCellStyle(style);
            sheet.getRow(2).getCell(16).setCellValue("添加矿物油");
            sheet.getRow(2).getCell(16).setCellStyle(style);
            sheet.getRow(2).getCell(17).setCellValue("光源");
            sheet.getRow(2).getCell(17).setCellStyle(style);
            sheet.getRow(2).getCell(18).setCellValue("激光能量");
            sheet.getRow(2).getCell(18).setCellStyle(style);
            sheet.getRow(2).getCell(19).setCellValue("激光焦点位置");
            sheet.getRow(2).getCell(19).setCellStyle(style);
            sheet.getRow(2).getCell(20).setCellValue("操作者");
            sheet.getRow(2).getCell(20).setCellStyle(style);
            sheet.getRow(2).getCell(21).setCellValue("维护记录");
            sheet.getRow(2).getCell(21).setCellStyle(style);
            CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 23);
            sheet.addMergedRegion(region1);
            CellRangeAddress region2 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region2);
            CellRangeAddress region3 = new CellRangeAddress(1, 1, 1, 10);
            sheet.addMergedRegion(region3);
            CellRangeAddress region4 = new CellRangeAddress(1, 1, 11, 20);
            sheet.addMergedRegion(region4);
            CellRangeAddress region5 = new CellRangeAddress(1, 2, 21, 21);
            sheet.addMergedRegion(region5);
            CellRangeAddress region6 = new CellRangeAddress(1, 2, 22, 22);
            sheet.addMergedRegion(region6);
            CellRangeAddress region7 = new CellRangeAddress(1, 2, 23, 23);
            sheet.addMergedRegion(region7);
            return hssfWorkbook;

        }
        return hssfWorkbook;
    }
}
